/**
 * 资源系统模块
 * 定义游戏中的各种资源类型和资源池
 */

// 资源类型定义
export const RESOURCE_TYPES = {
    // 基础资源
    GOLD: {
        id: 'gold',
        name: '金币',
        icon: '🪙',
        description: '基础货币，可用于投资和交易',
        baseValue: 1.0,
        color: '#FFD700'
    },
    TRUST: {
        id: 'trust',
        name: '信任值',
        icon: '🤝',
        description: '影响AI返还率和特殊机会',
        baseValue: 2.0,
        color: '#4CAF50'
    },
    RISK: {
        id: 'risk',
        name: '风险点',
        icon: '⚠️',
        description: '增加投资风险和回报',
        baseValue: 1.5,
        color: '#FF5722'
    }
};

// 资源池配置
export const POOL_CONFIGS = {
    // 基础游戏资源池
    BASIC: {
        name: '基础资源池',
        initialResources: {
            [RESOURCE_TYPES.GOLD.id]: 10
        }
    },
    // 标准游戏资源池
    STANDARD: {
        name: '标准资源池',
        initialResources: {
            [RESOURCE_TYPES.GOLD.id]: 8,
            [RESOURCE_TYPES.TRUST.id]: 2
        }
    },
    // 高级游戏资源池
    ADVANCED: {
        name: '高级资源池',
        initialResources: {
            [RESOURCE_TYPES.GOLD.id]: 6,
            [RESOURCE_TYPES.TRUST.id]: 3,
            [RESOURCE_TYPES.RISK.id]: 1
        }
    }
};

/**
 * 计算资源增值
 * 根据不同资源类型和投资组合计算增值
 * @param {Object} investment 投资的资源
 * @returns {Object} 增值后的资源
 */
export function calculateMultiplier(investment) {
    // 基础增值倍率
    const baseMultiplier = 3;
    
    // 信任值增益：每点信任值增加5%增值率
    const trustBonus = (investment[RESOURCE_TYPES.TRUST.id] || 0) * 0.05;
    
    // 风险点增益：每点风险点有50%几率增加20%增值率，50%几率减少10%增值率
    let riskModifier = 0;
    const riskPoints = investment[RESOURCE_TYPES.RISK.id] || 0;
    for (let i = 0; i < riskPoints; i++) {
        if (Math.random() < 0.5) {
            riskModifier += 0.2; // 增益
        } else {
            riskModifier -= 0.1; // 损失
        }
    }
    
    // 计算最终倍率，最低为1倍（保底不亏本）
    const finalMultiplier = Math.max(1, baseMultiplier + trustBonus + riskModifier);
    
    // 应用倍率到每种资源
    const multipliedResources = {};
    for (const resourceId in investment) {
        if (investment[resourceId] > 0) {
            multipliedResources[resourceId] = Math.round(investment[resourceId] * finalMultiplier);
        }
    }
    
    return {
        resources: multipliedResources,
        multiplier: finalMultiplier,
        baseMultiplier,
        trustBonus,
        riskModifier
    };
}

/**
 * 根据资源池配置初始化游戏资源
 * @param {Object} poolConfig 资源池配置
 * @returns {Object} 初始化的资源对象
 */
export function initializeResources(poolConfig = POOL_CONFIGS.BASIC) {
    const resources = {};
    
    // 初始化所有资源类型
    Object.values(RESOURCE_TYPES).forEach(type => {
        resources[type.id] = poolConfig.initialResources[type.id] || 0;
    });
    
    return resources;
}

/**
 * 计算资源总价值
 * @param {Object} resources 资源对象
 * @returns {Number} 资源总价值
 */
export function calculateResourceValue(resources) {
    let totalValue = 0;
    
    for (const resourceId in resources) {
        const resourceType = Object.values(RESOURCE_TYPES).find(type => type.id === resourceId);
        if (resourceType) {
            totalValue += resources[resourceId] * resourceType.baseValue;
        }
    }
    
    return totalValue;
}

/**
 * 通用资源数据提取工具函数
 * 从记录中提取指定类型的资源值，兼容新旧数据结构
 * @param {Object|Number} resourceData - 资源数据，可能是对象或数字
 * @param {String} resourceType - 资源类型，默认为'gold'
 * @returns {Number} - 提取的资源值
 */
export function extractResourceValue(resourceData, resourceType = 'gold') {
    if (typeof resourceData === 'object' && resourceData !== null) {
        // 新版多资源结构
        return resourceData[resourceType] || 0;
    } else {
        // 旧版单一金币结构
        return resourceData || 0;
    }
}
